#ifndef VERIFIER_H
#define VERIFIER_H

// Takes an existing split, and fixes it up, if necessary.

#include "Cluster.h"
#include <vector>

class Verifier_Of_Splits {
public:
    // Takes a set of subclusters, possibly re-arranges them
    // or even splits them further, and returns a flag.
    // The goal is to decide whether the subclusters belong
    // apart, or need to be re-grouped or modified, to improve
    // the quality of the split that created them.
    //
    // The return value means:
    // true: the children are OK, no change made
    // false: children were changed or new ones created.
    virtual vector<Tree_Of_Clusters *> *verify(vector<Cluster*>& children) = 0;

    vector<Tree_Of_Clusters *> make_subtrees(Cluster *S1, Cluster *S2);
};

#endif
